//////////////////////////////////////////////////////////////////////////////////
//	 Copyright 2011 by Yosef Grabivker, ryuho@homenetworksoft.com
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////
//Link interface
#ifndef __ILINK_YG_H__
#define __ILINK_YG_H__

#include "def.h"

struct ILink
{
	virtual					~ILink() {}

	virtual void			Create()=0;
	virtual void			Connect( const CONPARAMS& con )=0;
	virtual RTSTRING		ReadFile(const wxString& strPath)=0;
	virtual RTSTRING		SendCmd(const wxString& strScript, unsigned int lDelay=RT_MAX_READ_TIMEOUT)=0;
	virtual RTSTRING		SendSymb(const wxString& str, unsigned int lDelay=RT_MAX_READ_TIMEOUT)=0;

	virtual void			CleanUp()=0;
	virtual bool			HaveGrep()=0;
	virtual RTSTRING		GetLog()=0;
	virtual bool			IsLoggedOn()=0;
};

struct CLinkGuard
{
							CLinkGuard(ILink* p):m_p(p)
							{
								if (m_p) m_p->Create();
							}
							
							~CLinkGuard()
							{
								if (m_p) m_p->CleanUp();
								delete m_p;
							}
	ILink* 					operator->() { return m_p; }
	operator ILink*()		{ return m_p; }
	
private:
	ILink*					m_p;
};


#endif //__ILINK_YG_H__